﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace proyectoENS
{
    public partial class frmRegistrarNotas : Form
    {
        int curso = 1;
        int cantColumn = 0;
        int trimestre = 0;
        List<string[]> notas = new List<string[]>();
        private static frmRegistrarNotas Instancia;
        public static frmRegistrarNotas onlyInstancia
        {
            get
            {
                if (Instancia == null || Instancia.IsDisposed)
                    Instancia = new frmRegistrarNotas();
                return Instancia;
            }
        }
        private frmRegistrarNotas()
        {
            InitializeComponent();
        }

        private void frmRegistrarAsistencias_Load(object sender, EventArgs e)
        {
            cbxTrimestre.SelectedIndex = 0;
            cbxCursos.DataSource = DALCursos.getVwCursos2();
            
        }
      
        private void crearDataGrid()
        {
            dvgAsistencias.Columns.Clear();
            DataGridViewColumn columnIdAlumno = new DataGridViewColumn();
            columnIdAlumno.HeaderText = "Alumno";
            columnIdAlumno.CellTemplate = new DataGridViewTextBoxCell();
            columnIdAlumno.Name = "idAlumno";
            columnIdAlumno.Visible = false;
            columnIdAlumno.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dvgAsistencias.Columns.Add(columnIdAlumno);
            cantColumn++;
            
            DataGridViewColumn columnAlumno = new DataGridViewColumn();
            columnAlumno.HeaderText = "Alumno";
            columnAlumno.CellTemplate = new DataGridViewTextBoxCell();
            columnAlumno.Name = "alumno";
            columnAlumno.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            columnAlumno.ReadOnly = true;
            dvgAsistencias.Columns.Add(columnAlumno);
            cantColumn++;
            if (cbxTrimestre.SelectedItem.ToString() == "Integrador")
            {
                foreach (Materias item in DALMaterias.getIntegradorasByCurso(curso))
                {
                    DataGridViewColumn c = new DataGridViewColumn();
                    c.HeaderText = item.nombreMateria.ToUpper();
                    c.CellTemplate = new DataGridViewTextBoxCell();
                    c.Name = item.idMateria.ToString();
                    c.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                    dvgAsistencias.Columns.Add(c);
                    cantColumn++;
                }
            }
            else
            {
                foreach (Materias item in DALMaterias.getMateriasByCurso(curso))
                {
                    DataGridViewColumn c = new DataGridViewColumn();
                    c.HeaderText = item.nombreMateria.ToUpper();
                    c.CellTemplate = new DataGridViewTextBoxCell();
                    c.Name = item.idMateria.ToString();
                    c.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                    dvgAsistencias.Columns.Add(c);
                    cantColumn++;
                }
            }
        }
        private void cargarAlumnos()
        {
            if (cbxTrimestre.SelectedItem.ToString() == "Recuperatorio")
            {
                foreach (Alumnos item in DALAlumnos.getAlumnosByIdCurso(curso))
                {
                    string[] fila = new string[cantColumn];
                    fila[0] = item.id.ToString();
                    fila[1] = item.Apellidos + "," + item.nombres;
                    for (int i = 2; i < dvgAsistencias.ColumnCount; i++)
                    {
                        if (DALNotas.getPromedioByIdAlumnoMateria(item.id, int.Parse(dvgAsistencias.Columns[i].Name)) < 7)
                            fila[i] = "";
                        else
                            fila[i] = "No Recupera";
                    }
                    dvgAsistencias.Rows.Add(fila);
                }
            }
            else
            {
                foreach (Alumnos item in DALAlumnos.getAlumnosByIdCurso(curso))
                {
                    string[] fila = new string[cantColumn];
                    fila[0] = item.id.ToString();
                    fila[1] = item.Apellidos + ", " + item.nombres;


                    for (int i = 2; i < dvgAsistencias.ColumnCount; i++)
                    {
                        if (DALNotas.getCalificacion(item.id, int.Parse(dvgAsistencias.Columns[i].Name), trimestre) != null)
                            fila[i] = DALNotas.getCalificacion(item.id, int.Parse(dvgAsistencias.Columns[i].Name), trimestre).calificacion.ToString();
                        else
                            fila[i] = "";
                    }
                    dvgAsistencias.Rows.Add(fila);
                }
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            notas.Clear();
            foreach (DataGridViewRow item in dvgAsistencias.Rows)
            {
                if (item.Cells[0].Value != null)
                {
                    for (int i = 2; i < item.Cells.Count; i++)
                    {
                        if (item.Cells[i].Value != null && (!(string.IsNullOrEmpty(item.Cells[i].Value.ToString()))))
                        {
                            string[] temp = new string[3];
                            //idAlumno 
                            temp[0] = item.Cells[0].Value.ToString();
                            //idMateria 
                            temp[1] = dvgAsistencias.Columns[i].Name;
                            //Nota 
                            temp[2] = item.Cells[i].Value.ToString();
                            notas.Add(temp);
                        }
                                              
                       
                    }

                }
            }

            
            DialogResult result = MessageBox.Show("Controle los datos ingresados antes de continuar, ¿Desea continuar?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);
            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                DALNotas.setNotas(notas, trimestre);
                MessageBox.Show("Operacion realizada con éxito");
            }
            else
                return;
        }

        private void btnSeleccionar_Click(object sender, EventArgs e)
        {
            if ((vwCursos2)cbxCursos.SelectedItem == null)
                return;
            curso = ((vwCursos2)cbxCursos.SelectedItem).idCurso;
            if (cbxTrimestre.SelectedItem == null)
            {
                MessageBox.Show("No ha seleccionado ningun trimestre");
                return;
            }
            if (cbxTrimestre.SelectedItem.ToString() == "1ero")
                trimestre = 1;
            else if (cbxTrimestre.SelectedItem.ToString() == "2do")
                trimestre = 2;
            else if (cbxTrimestre.SelectedItem.ToString() == "3ero")
                trimestre = 3;
            else
                trimestre = 4;
            
            crearDataGrid();
            cargarAlumnos();
        }

        private void dvgAsistencias_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (!(functionesGlobales.isNumeric(dvgAsistencias.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()) == true &&
                (int.Parse(dvgAsistencias.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()) <= 10)))
            {
                MessageBox.Show("Ha introducido un valor no valido. Los valores deben ser numericos menores a 10");
                dvgAsistencias.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "";
            }
        }

        private void cbxCursos_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnSeleccionar_Click(null, null);
        }

        private void cbxTrimestre_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnSeleccionar_Click(null, null);
        }
    }
}
